/**
 * 节流：类似控制阀门一样定期开放函数，也就是让函数执行一次。
 *       在某个时间段内暂时失效，过了这段时间再重新激活。
 * 效果：
 *      如果短时间内大量出发同一事件，那么函数执行一次之后，
 *      该函数在制定时间期限内不再工作，直至过了这段时间才重新生效。
 * @param callback
 * @param delay  节流函数不止下面这一种写法
 *       1、可以不完全借助setTimeout,可以把状态位转换成时间戳，
 *          然后利用时间戳差值是否大于指定时间间隔来做判断。
 *       2、也可以直接将setTimeout的返回标记做判断条件，定时器存在表示还在冷却，
 *          并且在callback执行之后消除定时器，表示激活。
 *
 * 使用场景：搜索框input事件，要支持实时输入搜索，可以使用节流方案。
 *         （间隔一段时间就必须查询相关内容。或者实现输入间隔大于某个值【例如500ms】,
 *           就当做用户输入完成，然后开始搜索）
 * @returns {Function}
 */
function throttle(callback,delay) {
    console.log(1234567890)
    let valid = true
    return function () {
        if (!valid) return;
        /**
         * 工作时间，执行函数并且在间隔期内把状态设置为无效
         * @type {boolean}
         */
        valid = false
        setTimeout(()=>{
            callback.apply(this,arguments)
            valid = true
        },delay)
    }
}
